--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Node / ReticulumProjects / Sideband.git / files / sbapp / kivymd / tools / patterns / create_project.py
Displaying Raw • Download
sbapp/kivymd/tools/patterns/create_project.py 67a8f61af8bdd2583ef8ed24d6ad80d7e39ae677 (67a8f61a) Text, 39.37 KB
T8b949e"""
Script creates a project with the MVC pattern
=============================================
.. versionadded:: 1.0.0
.. seealso::
`MVC pattern <https://en.wikipedia.org/wiki/Model–view–controller>`_
.. rubric:: Use a clean architecture for your applications.
.. image:: https://github.com/HeaTTheatR/KivyMD-data/raw/master/gallery/kivymddoc/preview-mvc.png
:align: center
Use a clean architecture for your applications. KivyMD allows you to quickly
create a project template with the MVC pattern. So far, this is the only
pattern that this utility offers. You can also include database support in
your project. At the moment, support for the Firebase database
(the basic implementation of the real time database) and RestDB
(the full implementation) is available.
Project creation
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Template command::
kivymd.create_project \\
name_pattern \\
path_to_project \\
name_project \\
python_version \\
kivy_version
Example command::
kivymd.create_project \\
MVC \\
/Users/macbookair/Projects \\
MyMVCProject \\
python3.10 \\
2.1.0
This command will by default create a project with an MVC pattern.
Also, the project will create a virtual environment with Python 3.10,
Kivy version 2.1.0 and KivyMD master version.
.. note::
Please note that the Python version you specified must be installed on your
computer.
.. image:: https://github.com/HeaTTheatR/KivyMD-data/raw/master/gallery/kivymddoc/mvc-base.png
:align: center
Creating a project using a database
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
.. note::
Note that in the following command, you can use one of two database names:
'firebase' or 'restdb'.
Template command::
kivymd.create_project \\
name_pattern \\
path_to_project \\
name_project \\
python_version \\
kivy_version \\
--name_database
Example command::
kivymd.create_project \\
MVC \\
/Users/macbookair/Projects \\
MyMVCProject \\
python3.10 \\
2.1.0 \\
--name_database restdb
This command will create a project with an MVC template by default.
The project will also create a virtual environment with Python 3.10,
Kivy version 2.1.0, KivyMD master version and a wrapper for working with
the database restdb.io.
.. image:: https://github.com/HeaTTheatR/KivyMD-data/raw/master/gallery/kivymddoc/mvc-database.png
:align: center
.. code-block:: python
class DataBase:
def __init__(self):
database_url = "https://restdbio-5498.restdb.io"
api_key = "7ce258d66f919d3a891d1166558765f0b4dbd"
.. note::
Please note that `database.py` the shell in the `DataBase` class uses the
`database_url` and `api_key` parameters on the test database (works only in read mode),
so you should use your data for the database.
Create project with hot reload
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Template command::
kivymd.create_project \\
name_pattern \\
path_to_project \\
name_project \\
python_version \\
kivy_version \\
--use_hotreload
Example command::
kivymd.create_project \\
MVC \\
/Users/macbookair/Projects \\
MyMVCProject \\
python3.10 \\
2.1.0 \\
--use_hotreload yes
After creating the project, open the file `main.py`, there is a lot of useful
information. Also, the necessary information is in other modules of the project
in the form of comments. So do not forget to look at the source files of the
created project.
Create project with responsive view
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
When creating a project, you can specify which views should use responsive
behavior. To do this, specify the name of the view/views in the
`--use_responsive` argument:
Template command::
kivymd.create_project \\
name_pattern \\
path_to_project \\
name_project \\
python_version \\
kivy_version \\
--name_screen FirstScreen SecondScreen ThirdScreen \\
--use_responsive FirstScreen SecondScreen
The `FirstScreen` and `SecondScreen` views will be created with an responsive
architecture. For more detailed information about using the adaptive view, see
the `MDResponsiveLayout <https://kivymd.readthedocs.io/en/latest/components/responsivelayout/>`_
widget.
Others command line arguments
=============================
Required Arguments
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern pattern
- the name of the pattern with which the project will be created
directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory directory
- directory in which the project will be created
name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name name
- project name
python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version python_version
- the version of Python (specify as `python3.9` or `python3.8`) with
- which the virtual environment will be created
kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version kivy_version
- version of Kivy (specify as `2.1.0` or `master`) that will be used in the project
Optional arguments
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen name_screen
- the name of the class which be used when creating the project pattern
When you need to create an application template with multiple screens,
use multiple values separated by a space for the `name_screen` parameter,
for example, as shown below:
Template command::
kivymd.create_project \\
name_pattern \\
path_to_project \\
name_project \\
python_version \\
kivy_version \\
--name_screen FirstScreen SecondScreen ThirdScreen
name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database name_database
- provides a basic template for working with the 'firebase' library
- or a complete implementation for working with a database 'restdb.io'
use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload use_hotreload
- creates a hot reload entry point to the application
use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization use_localization
- creates application localization files
use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive use_responsive
- the name/names of the views to be used by the responsive UI
.. warning:: On Windows, hot reloading of Python files may not work.
But, for example, there is no such problem in macOS. If you fix this,
please report it to the KivyMD community.
"""
Te6edf3__all__ Tff7b72= Tb4b4b4[
Ta5d6ff"Ta5d6ffmainTa5d6ff"Tb4b4b4,
Tb4b4b4]
Tff7b72import T7ee787os
Tff7b72import T7ee787re
Tff7b72import T7ee787shutil
Tff7b72from T7ee787typing Tff7b72import Te6edf3Union
Tff7b72from T7ee787kivy Tff7b72import Te6edf3LoggerTb4b4b4, Te6edf3platform
Tff7b72from T7ee787kivymd Tff7b72import Te6edf3path Tff7b72as Te6edf3kivymd_path
Tff7b72from T7ee787kivymdT7ee787.T7ee787toolsT7ee787.T7ee787argument_parser Tff7b72import Te6edf3ArgumentParserWithHelp
Te6edf3temp_basemodel Tff7b72= Ta5d6ff'''Ta5d6ff# The model implements the observer pattern. This means that the class must
Ta5d6ff# support adding, removing, and alerting observers. In this case, the model is
Ta5d6ff# completely independent of controllers and views. It is important that all
Ta5d6ff# registered observers implement a specific method that will be called by the
Ta5d6ff# model when they are notified (in this case, it is the `model_is_changed`
Ta5d6ff# method). For this, observers must be descendants of an abstract class,
Ta5d6ff# inheriting which, the `model_is_changed` method must be overridden.
Ta5d6ffclass BaseScreenModel:
Ta5d6ff Ta5d6ff"Ta5d6ff"Ta5d6ff"Ta5d6ffImplements a base class for model modules.Ta5d6ff"Ta5d6ff"Ta5d6ff"
Ta5d6ff _observers = []
Ta5d6ff def add_observer(self, observer) -> None:
Ta5d6ff self._observers.append(observer)
Ta5d6ff def remove_observer(self, observer) -> None:
Ta5d6ff self._observers.remove(observer)
Ta5d6ff def notify_observers(self, name_screen: str) -> None:
Ta5d6ff Ta5d6ff"Ta5d6ff"Ta5d6ff"
Ta5d6ff Method that will be called by the observer when the model data changes.
Ta5d6ff :param name_screen:
Ta5d6ff name of the view for which the method should be called
Ta5d6ff :meth:`model_is_changed`.
Ta5d6ff Ta5d6ff"Ta5d6ff"Ta5d6ff"
Ta5d6ff for observer in self._observers:
Ta5d6ff if observer.name == name_screen:
Ta5d6ff observer.model_is_changed()
Ta5d6ff break
Ta5d6ff'''
Te6edf3temp_database_model Tff7b72= Ta5d6ff'''Ta5d6ffimport multitasking
Ta5d6fffrom Model.base_model import BaseScreenModel
Ta5d6ffmultitasking.set_max_threads(10)
Ta5d6ffclass Tffd700{name_screen}Ta5d6ffModel(BaseScreenModel):
Ta5d6ff Ta5d6ff"Ta5d6ff"Ta5d6ff"
Ta5d6ff Implements the logic of the
Ta5d6ff :class:`~View.Tffd700{name_screen}Ta5d6ff.Tffd700{module_name}Ta5d6ff.Tffd700{name_screen}Ta5d6ffView` class.
Ta5d6ff Ta5d6ff"Ta5d6ff"Ta5d6ff"
Ta5d6ff def __init__(self, database):
Ta5d6ff # Just an example of the data. Use your own values.
Ta5d6ff self._data = None
Ta5d6ff @property
Ta5d6ff def data(self):
Ta5d6ff return self._data
Ta5d6ff @data.setter
Ta5d6ff def data(self, value):
Ta5d6ff self._data = value
Ta5d6ff # We notify the View -
Ta5d6ff # :class:`~View.Tffd700{name_screen}Ta5d6ff.Tffd700{module_name}Ta5d6ff.Tffd700{name_screen}Ta5d6ffView` about the
Ta5d6ff # changes that have occurred in the data model.
Ta5d6ff self.notify_observers(Tffd700{notify_name_screen}Ta5d6ff)
Ta5d6ff @multitasking.task
Ta5d6ff def check_data(self):
Ta5d6ff Ta5d6ff"Ta5d6ff"Ta5d6ff"Ta5d6ffJust an example of the method. Use your own code.Ta5d6ff"Ta5d6ff"Ta5d6ff"
Ta5d6ff self.data = [Ta5d6ff"Ta5d6ffexample itemTa5d6ff"Ta5d6ff]
Ta5d6ff'''
Te6edf3temp_without_database_model Tff7b72= Ta5d6ff'''Ta5d6fffrom Model.base_model import BaseScreenModel
Ta5d6ffclass Tffd700{name_screen}Ta5d6ffModel(BaseScreenModel):
Ta5d6ff Ta5d6ff"Ta5d6ff"Ta5d6ff"
Ta5d6ff Implements the logic of the
Ta5d6ff :class:`~View.Tffd700{module_name}Ta5d6ff.Tffd700{name_screen}Ta5d6ff.Tffd700{name_screen}Ta5d6ffView` class.
Ta5d6ff Ta5d6ff"Ta5d6ff"Ta5d6ff"Ta5d6ff'''
Te6edf3temp_screens_imports Tff7b72= Ta5d6ff"""Ta5d6ff# The screens dictionary contains the objects of the models and controllers
Ta5d6ff# of the screens of the application.
Ta5d6ff"""
Te6edf3temp_code_responsive_view Tff7b72= Ta5d6ff'''Ta5d6fffrom kivymd.uix.responsivelayout import MDResponsiveLayout
Ta5d6fffrom View.Tffd700{name_screen}Ta5d6ff.components import (
Ta5d6ff MobileScreenView,
Ta5d6ff TabletScreenView,
Ta5d6ff DesktopScreenView,
Ta5d6ff)
Ta5d6fffrom View.base_screen import BaseScreenView
Ta5d6ffclass Tffd700{name_screen}Ta5d6ffView(MDResponsiveLayout, BaseScreenView):
Ta5d6ff def __init__(self, **kw):
Ta5d6ff super().__init__(**kw)
Ta5d6ff self.mobile_view = MobileScreenView()
Ta5d6ff self.tablet_view = TabletScreenView()
Ta5d6ff self.desktop_view = DesktopScreenView()
Ta5d6ff def model_is_changed(self) -> None:
Ta5d6ff Ta5d6ff"Ta5d6ff"Ta5d6ff"
Ta5d6ff Called whenever any change has occurred in the data model.
Ta5d6ff The view in this method tracks these changes and updates the UI
Ta5d6ff according to these changes.
Ta5d6ff Ta5d6ff"Ta5d6ff"Ta5d6ff"
Ta5d6ff'''
Te6edf3temp_responsive_component_imports Tff7b72= Ta5d6ff"""Ta5d6fffrom .platforms.MobileScreen.mobile_screen import MobileScreenView
Ta5d6fffrom .platforms.TabletScreen.tablet_screen import TabletScreenView
Ta5d6fffrom .platforms.DesktopScreen.desktop_screen import DesktopScreenView
Ta5d6ff"""
Te6edf3temp_responsive_platform_baseclass Tff7b72= Ta5d6ff"""Ta5d6fffrom kivymd.uix.screen import MDScreen
Ta5d6ffclass Tffd700{}Ta5d6ffView(MDScreen):
Ta5d6ff pass
Ta5d6ff"""
Te6edf3temp_code_view Tff7b72= Ta5d6ff'''Ta5d6fffrom View.base_screen import BaseScreenView
Ta5d6ffclass Tffd700{name_screen}Ta5d6ffView(BaseScreenView):
Ta5d6ff def model_is_changed(self) -> None:
Ta5d6ff Ta5d6ff"Ta5d6ff"Ta5d6ff"
Ta5d6ff Called whenever any change has occurred in the data model.
Ta5d6ff The view in this method tracks these changes and updates the UI
Ta5d6ff according to these changes.
Ta5d6ff Ta5d6ff"Ta5d6ff"Ta5d6ff"
Ta5d6ff'''
Te6edf3temp_code_controller Tff7b72= Ta5d6ff'''Tffd700{import_module}
Ta5d6ffclass Tffd700{name_screen}Ta5d6ffController:
Ta5d6ff Ta5d6ff"Ta5d6ff"Ta5d6ff"
Ta5d6ff The `Tffd700{name_screen}Ta5d6ffController` class represents a controller implementation.
Ta5d6ff Coordinates work of the view with the model.
Ta5d6ff The controller implements the strategy pattern. The controller connects to
Ta5d6ff the view to control its actions.
Ta5d6ff Ta5d6ff"Ta5d6ff"Ta5d6ff"
Ta5d6ff def __init__(self, model):
Ta5d6ff self.model = model # Model.Tffd700{module_name}Ta5d6ff.Tffd700{name_screen}Ta5d6ffModel
Ta5d6ff self.view = Tffd700{name_view}Ta5d6ff(controller=self, model=self.model)
Ta5d6ff def get_view(self) -> Tffd700{get_view}Ta5d6ff:
Ta5d6ff return self.view
Ta5d6ff'''
Te6edf3temp_base_screen Tff7b72= Ta5d6ff'''Ta5d6fffrom kivy.properties import ObjectProperty
Ta5d6fffrom kivymd.app import MDApp
Ta5d6fffrom kivymd.uix.screen import MDScreen
Ta5d6fffrom Utility.observer import Observer
Ta5d6ffclass BaseScreenView(MDScreen, Observer):
Ta5d6ff Ta5d6ff"Ta5d6ff"Ta5d6ff"
Ta5d6ff A base class that implements a visual representation of the model data.
Ta5d6ff The view class must be inherited from this class.
Ta5d6ff Ta5d6ff"Ta5d6ff"Ta5d6ff"
Ta5d6ff controller = ObjectProperty()
Ta5d6ff Ta5d6ff"Ta5d6ff"Ta5d6ff"
Ta5d6ff Controller object - :class:`~Controller.controller_screen.ClassScreenControler`.
Ta5d6ff :attr:`controller` is an :class:`~kivy.properties.ObjectProperty`
Ta5d6ff and defaults to `None`.
Ta5d6ff Ta5d6ff"Ta5d6ff"Ta5d6ff"
Ta5d6ff model = ObjectProperty()
Ta5d6ff Ta5d6ff"Ta5d6ff"Ta5d6ff"
Ta5d6ff Model object - :class:`~Model.model_screen.ClassScreenModel`.
Ta5d6ff :attr:`model` is an :class:`~kivy.properties.ObjectProperty`
Ta5d6ff and defaults to `None`.
Ta5d6ff Ta5d6ff"Ta5d6ff"Ta5d6ff"
Ta5d6ff manager_screens = ObjectProperty()
Ta5d6ff Ta5d6ff"Ta5d6ff"Ta5d6ff"
Ta5d6ff Screen manager object - :class:`~kivymd.uix.screenmanager.MDScreenManager`.
Ta5d6ff :attr:`manager_screens` is an :class:`~kivy.properties.ObjectProperty`
Ta5d6ff and defaults to `None`.
Ta5d6ff Ta5d6ff"Ta5d6ff"Ta5d6ff"
Ta5d6ff def __init__(self, **kw):
Ta5d6ff super().__init__(**kw)
Ta5d6ff # Often you need to get access to the application object from the view
Ta5d6ff # class. You can do this using this attribute.
Ta5d6ff self.app = MDApp.get_running_app()
Ta5d6ff # Adding a view class as observer.
Ta5d6ff self.model.add_observer(self)
Ta5d6ff'''
Te6edf3temp_utility Tff7b72= Ta5d6ff'''
Ta5d6ff# Of course, Ta5d6ff"Ta5d6ffvery flexible PythonTa5d6ff"Ta5d6ff allows you to do without an abstract
Ta5d6ff# superclass at all or use the clever exception `NotImplementedError`. In my
Ta5d6ff# opinion, this can negatively affect the architecture of the application.
Ta5d6ff# I would like to point out that using Kivy, one could use the on-signaling
Ta5d6ff# model. In this case, when the state changes, the model will send a signal
Ta5d6ff# that can be received by all attached observers. This approach seems less
Ta5d6ff# universal - you may want to use a different library in the future.
Ta5d6ffclass Observer:
Ta5d6ff Ta5d6ff"Ta5d6ff"Ta5d6ff"Ta5d6ffAbstract superclass for all observers.Ta5d6ff"Ta5d6ff"Ta5d6ff"
Ta5d6ff def model_is_changed(self):
Ta5d6ff Ta5d6ff"Ta5d6ff"Ta5d6ff"
Ta5d6ff The method that will be called on the observer when the model changes.
Ta5d6ff Ta5d6ff"Ta5d6ff"Ta5d6ff"
Ta5d6ff'''
Te6edf3temp_hot_reload_main Tff7b72= Ta5d6ff'''
Ta5d6ff"Ta5d6ff"Ta5d6ff"
Ta5d6ffScript for managing hot reloading of the project.
Ta5d6ffFor more details see the documentation page -
Ta5d6ffhttps://kivymd.readthedocs.io/en/latest/api/kivymd/tools/patterns/create_project/
Ta5d6ffTo run the application in hot boot mode, execute the command in the console:
Ta5d6ffDEBUG=1 python main.py
Ta5d6ff"Ta5d6ff"Ta5d6ff"
Ta5d6ffimport importlib
Ta5d6ffimport os
Ta5d6fffrom kivy import Config
Ta5d6fffrom PIL import ImageGrab
Ta5d6ff# TODO: You may know an easier way to get the size of a computer display.
Ta5d6ffresolution = ImageGrab.grab().size
Ta5d6ff# Change the values of the application window size as you need.
Ta5d6ffConfig.set(Ta5d6ff"Ta5d6ffgraphicsTa5d6ff"Ta5d6ff, Ta5d6ff"Ta5d6ffheightTa5d6ff"Ta5d6ff, resolution[1])
Ta5d6ffConfig.set(Ta5d6ff"Ta5d6ffgraphicsTa5d6ff"Ta5d6ff, Ta5d6ff"Ta5d6ffwidthTa5d6ff"Ta5d6ff, Ta5d6ff"Ta5d6ff400Ta5d6ff"Ta5d6ff)
Ta5d6fffrom kivy.core.window import WindowTffd700{}
Ta5d6ff# Place the application window on the right side of the computer screen.
Ta5d6ffWindow.top = 0
Ta5d6ffWindow.left = resolution[0] - Window.width
Ta5d6fffrom kivymd.tools.hotreload.app import MDApp
Ta5d6fffrom kivymd.uix.screenmanager import MDScreenManager
Tffd700{}Tffd700{}
Ta5d6ffclass Tffd700{}Ta5d6ff(MDApp):
Ta5d6ff KV_DIRS = [os.path.join(os.getcwd(), Ta5d6ff"Ta5d6ffViewTa5d6ff"Ta5d6ff)]Tffd700{}
Ta5d6ff def build_app(self) -> MDScreenManager:
Ta5d6ff Ta5d6ff"Ta5d6ff"Ta5d6ff"
Ta5d6ff In this method, you donTa5d6ff'Ta5d6fft need to change anything other than the
Ta5d6ff application theme.
Ta5d6ff Ta5d6ff"Ta5d6ff"Ta5d6ff"
Ta5d6ff import View.screens
Ta5d6ff self.manager_screens = MDScreenManager()Tffd700{}Tffd700{}
Ta5d6ff Window.bind(on_key_down=self.on_keyboard_down)
Ta5d6ff importlib.reload(View.screens)
Ta5d6ff screens = View.screens.screens
Ta5d6ff for i, name_screen in enumerate(screens.keys()):
Ta5d6ff model = screens[name_screen][Ta5d6ff"Ta5d6ffmodelTa5d6ff"Ta5d6ff](Tffd700{}Ta5d6ff)
Ta5d6ff controller = screens[name_screen][Ta5d6ff"Ta5d6ffcontrollerTa5d6ff"Ta5d6ff](model)
Ta5d6ff view = controller.get_view()
Ta5d6ff view.manager_screens = self.manager_screens
Ta5d6ff view.name = name_screen
Ta5d6ff self.manager_screens.add_widget(view)
Ta5d6ff return self.manager_screens
Ta5d6ff def on_keyboard_down(self, window, keyboard, keycode, text, modifiers) -> None:
Ta5d6ff Ta5d6ff"Ta5d6ff"Ta5d6ff"
Ta5d6ff The method handles keyboard events.
Ta5d6ff By default, a forced restart of an application is tied to the
Ta5d6ff `CTRL+R` key on Windows OS and `COMMAND+R` on Mac OS.
Ta5d6ff Ta5d6ff"Ta5d6ff"Ta5d6ff"
Ta5d6ff if Ta5d6ff"Ta5d6ffmetaTa5d6ff"Ta5d6ff in modifiers or Ta5d6ff"Ta5d6ffctrlTa5d6ff"Ta5d6ff in modifiers and text == Ta5d6ff"Ta5d6ffrTa5d6ff"Ta5d6ff:
Ta5d6ff self.rebuild()Tffd700{}Tffd700{}
Tffd700{}Ta5d6ff().run()
Ta5d6ff# After you finish the project, remove the above code and uncomment the below
Ta5d6ff# code to test the application normally without hot reloading.
Ta5d6ff'''
Te6edf3temp_main Tff7b72= Ta5d6ff'''Ta5d6ff"Ta5d6ff"Ta5d6ff"
Ta5d6ffThe entry point to the application.
Ta5d6ffThe application uses the MVC template. Adhering to the principles of clean
Ta5d6ffarchitecture means ensuring that your application is easy to test, maintain,
Ta5d6ffand modernize.
Ta5d6ffYou can read more about this template at the links below:
Ta5d6ffhttps://github.com/HeaTTheatR/LoginAppMVC
Ta5d6ffhttps://en.wikipedia.org/wiki/Model–view–controller
Ta5d6ff"Ta5d6ff"Ta5d6ff"
Tffd700{}
Ta5d6fffrom kivymd.app import MDApp
Ta5d6fffrom kivymd.uix.screenmanager import MDScreenManager
Ta5d6fffrom View.screens import screensTffd700{}
Tffd700{}
Ta5d6ffclass Tffd700{}Ta5d6ff(MDApp):Tffd700{}
Ta5d6ff def __init__(self, **kwargs):
Ta5d6ff super().__init__(**kwargs)Tffd700{}
Ta5d6ff self.load_all_kv_files(self.directory)
Ta5d6ff # This is the screen manager that will contain all the screens of your
Ta5d6ff # application.
Ta5d6ff self.manager_screens = MDScreenManager()
Ta5d6ff Tffd700{}
Ta5d6ff def build(self) -> MDScreenManager:
Ta5d6ff self.generate_application_screens()
Ta5d6ff return self.manager_screens
Ta5d6ff def generate_application_screens(self) -> None:
Ta5d6ff Ta5d6ff"Ta5d6ff"Ta5d6ff"
Ta5d6ff Creating and adding screens to the screen manager.
Ta5d6ff You should not change this cycle unnecessarily. He is self-sufficient.
Ta5d6ff If you need to add any screen, open the `View.screens.py` module and
Ta5d6ff see how new screens are added according to the given application
Ta5d6ff architecture.
Ta5d6ff Ta5d6ff"Ta5d6ff"Ta5d6ff"
Ta5d6ff for i, name_screen in enumerate(screens.keys()):
Ta5d6ff model = screens[name_screen][Ta5d6ff"Ta5d6ffmodelTa5d6ff"Ta5d6ff](Tffd700{}Ta5d6ff)
Ta5d6ff controller = screens[name_screen][Ta5d6ff"Ta5d6ffcontrollerTa5d6ff"Ta5d6ff](model)
Ta5d6ff view = controller.get_view()
Ta5d6ff view.manager_screens = self.manager_screens
Ta5d6ff view.name = name_screen
Ta5d6ff self.manager_screens.add_widget(view)
Tffd700{}Tffd700{}
Tffd700{}Ta5d6ff().run()
Ta5d6ff'''
Te6edf3temp_makefile Tff7b72= Ta5d6ff"""Ta5d6ff# FILE TO FIND AND CREATE LOCALIZATION FILES FOR YOUR APPLICATION. Tffea00\\
Tffea00\\
Ta5d6ffIn this file, you can specify in which files of your project to search for Tffea00\\
Ta5d6fflocalization strings. Tffea00\\
Ta5d6ffThese files should be listed in the below command: Tffea00\\
Tffea00\\
Tffea00\\
Ta5d6ffxgettext -Lpython --output=messages.pot --from-code=utf-8 Tffea00\\
Ta5d6ff path/to/file-1 Tffea00\\
Ta5d6ff path/to/file-2 Tffea00\\
Ta5d6ff ...
Ta5d6ff.PHONY: po mo
Ta5d6ffpo:
Ta5d6ff xgettext -Lpython --output=messages.pot --from-code=utf-8 Tffea00\\
Tffd700{}
Ta5d6ff msgmerge --update --no-fuzzy-matching --backup=off data/locales/po/en.po messages.pot
Ta5d6ff msgmerge --update --no-fuzzy-matching --backup=off data/locales/po/ru.po messages.pot
Ta5d6ffmo:
Ta5d6ff mkdir -p data/locales/en/LC_MESSAGES
Ta5d6ff mkdir -p data/locales/ru/LC_MESSAGES
Ta5d6ff msgfmt -c -o data/locales/en/LC_MESSAGES/Tffd700%sTa5d6ff.mo data/locales/po/en.po
Ta5d6ff msgfmt -c -o data/locales/ru/LC_MESSAGES/Tffd700%sTa5d6ff.mo data/locales/po/ru.po
Ta5d6ff"""
Te6edf3firebase_requirements Tff7b72= Ta5d6ff"""Ta5d6ffkivy==2.1.0
Ta5d6ffkivymd==1.0.0
Ta5d6ffmultitasking
Ta5d6fffirebase
Ta5d6fffirebase-admin
Ta5d6ffpython_jwt
Ta5d6ffgcloud
Ta5d6ffsseclient
Ta5d6ffpycryptodome==3.4.3
Ta5d6ffrequests_toolbelt
Ta5d6ff"""
Te6edf3without_firebase_requirements Tff7b72= Ta5d6ff"""Ta5d6ffkivy==2.1.0
Ta5d6ffkivymd==1.0.0
Ta5d6ff"""
Te6edf3available_patterns Tff7b72= Tb4b4b4[Ta5d6ff"Ta5d6ffMVCTa5d6ff"Tb4b4b4]
Te6edf3available_databases Tff7b72= Tb4b4b4[Ta5d6ff"Ta5d6fffirebaseTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffrestdbTa5d6ff"Tb4b4b4]
Te6edf3path_to_project Tff7b72= Ta5d6ff"Ta5d6ff"
Te6edf3project_name Tff7b72= Ta5d6ff"Ta5d6ff"
Te6edf3use_localization Tff7b72= Ta5d6ff"Ta5d6ff"
Te6edf3name_database Tff7b72= Ta5d6ff"Ta5d6ff"
Te6edf3use_hotreload Tff7b72= Ta5d6ff"Ta5d6ff"
Te6edf3temp_makefile_files Tff7b72= Ta5d6ff"Ta5d6ff"
Te6edf3temp_screens_data Tff7b72= Ta5d6ff"Ta5d6ff"
Te6edf3kivy_version Tff7b72= Ta5d6ff"Ta5d6ff"
Te6edf3python_version Tff7b72= Ta5d6ff"Ta5d6ff"
Tff7b72def Td2a8ffmainTb4b4b4(Tb4b4b4)Tb4b4b4:
T8b949e"""Project creation function."""
Tff7b72global Te6edf3project_name
Tff7b72global Te6edf3use_localization
Tff7b72global Te6edf3name_database
Tff7b72global Te6edf3use_hotreload
Tff7b72global Te6edf3temp_makefile_files
Tff7b72global Te6edf3temp_screens_data
Tff7b72global Te6edf3path_to_project
Tff7b72global Te6edf3kivy_version
Tff7b72global Te6edf3python_version
Te6edf3parser Tff7b72= Te6edf3create_argument_parserTb4b4b4(Tb4b4b4)
Te6edf3args Tff7b72= Te6edf3parserTff7b72.Td2a8ffparse_argsTb4b4b4(Tb4b4b4)
Te6edf3pattern_name Tff7b72= Te6edf3argsTff7b72.Td2a8ffpattern
Te6edf3project_directory Tff7b72= Te6edf3argsTff7b72.Td2a8ffdirectory
Te6edf3project_name Tff7b72= Ta5d6ff"Ta5d6ff"Tff7b72.Td2a8ffjoinTb4b4b4(Te6edf3argsTff7b72.Td2a8ffnameTff7b72.Td2a8ffsplitTb4b4b4(Ta5d6ff"Ta5d6ff Ta5d6ff"Tb4b4b4)Tb4b4b4)
Te6edf3kivy_version Tff7b72= Te6edf3argsTff7b72.Td2a8ffkivy_version
Te6edf3python_version Tff7b72= Te6edf3argsTff7b72.Td2a8ffpython_version
Tff7b72if Ta5d6ff"Ta5d6ff3Ta5d6ff" Tff7b72not Tff7b72in Te6edf3python_versionTb4b4b4:
Te6edf3parserTff7b72.Td2a8fferrorTb4b4b4(Ta5d6ff"Ta5d6ffPython must be at least version 3Ta5d6ff"Tb4b4b4)
Te6edf3name_screen Tff7b72= Te6edf3argsTff7b72.Td2a8ffname_screen
Te6edf3path_to_project Tff7b72= Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Te6edf3project_directoryTb4b4b4, Te6edf3project_nameTb4b4b4)
Te6edf3name_database Tff7b72= Te6edf3argsTff7b72.Td2a8ffname_database
Tff7b72if Te6edf3name_database Tff7b72!= Ta5d6ff"Ta5d6ffnoTa5d6ff" Tff7b72and Te6edf3name_database Tff7b72not Tff7b72in Te6edf3available_databasesTb4b4b4:
Te6edf3parserTff7b72.Td2a8fferrorTb4b4b4(
Ta5d6fffTa5d6ff"Ta5d6ffThe database name must be one of the Tffd700{Te6edf3available_databasesTffd700}Ta5d6ff listTa5d6ff"
Tb4b4b4)
Te6edf3use_hotreload Tff7b72= Te6edf3argsTff7b72.Td2a8ffuse_hotreload
Te6edf3use_localization Tff7b72= Te6edf3argsTff7b72.Td2a8ffuse_localization
Te6edf3use_responsive Tff7b72= Te6edf3argsTff7b72.Td2a8ffuse_responsive
T8b949e# Check arguments.
Tff7b72for Te6edf3name Tff7b72in Te6edf3name_screenTb4b4b4:
Tff7b72if Te6edf3nameTb4b4b4[Tff7b72-T79c0ff6Tb4b4b4:Tb4b4b4] Tff7b72!= Ta5d6ff"Ta5d6ffScreenTa5d6ff"Tb4b4b4:
Te6edf3parserTff7b72.Td2a8fferrorTb4b4b4(
Ta5d6fffTa5d6ff"Ta5d6ffThe name of the Tffd700{Te6edf3nameTffd700}Ta5d6ff screen should contain the word Ta5d6ff"
Ta5d6fffTa5d6ff"Ta5d6ff'Ta5d6ffScreenTa5d6ff'Ta5d6ff at the end.Tffea00\nTa5d6ff"
Ta5d6ff"Ta5d6ffFor example - Ta5d6ff'Ta5d6ff--name_screen MyFirstScreen ...Ta5d6ff'Ta5d6ff"
Tb4b4b4)
Tff7b72if Tff7b72not Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffexistsTb4b4b4(
Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Te6edf3kivymd_pathTb4b4b4, Ta5d6ff"Ta5d6fftoolsTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffpatternsTa5d6ff"Tb4b4b4, Te6edf3pattern_nameTb4b4b4)
Tb4b4b4)Tb4b4b4:
Te6edf3parserTff7b72.Td2a8fferrorTb4b4b4(
Ta5d6fffTa5d6ff"Ta5d6ffThere is no Tffd700{Te6edf3pattern_nameTffd700}Ta5d6ff pattern.Tffea00\nTa5d6ff"
Ta5d6fffTa5d6ff"Ta5d6ffOnly Tffd700{Te6edf3available_patternsTffd700}Ta5d6ff template is available.Ta5d6ff"
Tb4b4b4)
T8b949e# Call the functions of creating a project.
Tff7b72if Tff7b72not Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffexistsTb4b4b4(Te6edf3path_to_projectTb4b4b4)Tb4b4b4:
Te6edf3shutilTff7b72.Td2a8ffcopytreeTb4b4b4(
Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Te6edf3kivymd_pathTb4b4b4, Ta5d6ff"Ta5d6fftoolsTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffpatternsTa5d6ff"Tb4b4b4, Te6edf3pattern_nameTb4b4b4)Tb4b4b4,
Te6edf3path_to_projectTb4b4b4,
Tb4b4b4)
Te6edf3create_mainTb4b4b4(Tb4b4b4)
Tff7b72for Te6edf3name Tff7b72in Te6edf3name_screenTb4b4b4:
Te6edf3module_name Tff7b72= Te6edf3chek_camel_case_name_projectTb4b4b4(Te6edf3nameTb4b4b4)
Tff7b72if Tff7b72not Te6edf3module_nameTb4b4b4:
Te6edf3parserTff7b72.Td2a8fferrorTb4b4b4(
Ta5d6ff"Ta5d6ffThe name of the screen should be written in camel case style. Ta5d6ff"
Ta5d6ff"Tffea00\nTa5d6ffFor example - Ta5d6ff'Ta5d6ffMyFirstScreenTa5d6ff'Ta5d6ff"
Tb4b4b4)
Te6edf3module_name Tff7b72= Ta5d6ff"Ta5d6ff_Ta5d6ff"Tff7b72.Td2a8ffjoinTb4b4b4(Tb4b4b4[Te6edf3nameTff7b72.Td2a8fflowerTb4b4b4(Tb4b4b4) Tff7b72for Te6edf3name Tff7b72in Te6edf3module_nameTb4b4b4]Tb4b4b4)
T8b949e# Create models module.
Te6edf3create_modelTb4b4b4(Te6edf3nameTb4b4b4, Te6edf3module_nameTb4b4b4, Te6edf3name_databaseTb4b4b4, Te6edf3path_to_projectTb4b4b4)
T8b949e# Create controllers module.
Te6edf3create_controllerTb4b4b4(Te6edf3nameTb4b4b4, Te6edf3module_nameTb4b4b4, Te6edf3use_hotreloadTb4b4b4, Te6edf3path_to_projectTb4b4b4)
T8b949e# Create screens data.
Te6edf3create_screens_dataTb4b4b4(Te6edf3nameTb4b4b4, Te6edf3module_nameTb4b4b4)
Tff7b72if Te6edf3use_localization Tff7b72== Ta5d6ff"Ta5d6ffyesTa5d6ff"Tb4b4b4:
T8b949e# Create makefile data.
Te6edf3create_makefile_dataTb4b4b4(Te6edf3nameTb4b4b4, Te6edf3module_nameTb4b4b4)
T8b949e# Create views.
Te6edf3create_viewTb4b4b4(Te6edf3nameTb4b4b4, Te6edf3module_nameTb4b4b4, Te6edf3use_responsiveTb4b4b4, Te6edf3path_to_projectTb4b4b4)
T8b949e# Create module `NameProject/View/NameScreen/components/common/__init__.py`.
Te6edf3create_common_responsive_moduleTb4b4b4(Te6edf3use_responsiveTb4b4b4, Te6edf3path_to_projectTb4b4b4)
T8b949e# Create module `NameProject/View/screens.py`.
Te6edf3create_module_screensTb4b4b4(Tb4b4b4)
T8b949e# Create module `NameProject/Model/base_model.py`.
Te6edf3create_basemodelTb4b4b4(Tb4b4b4)
T8b949e# Create module `NameProject/View/base_screen.py`.
Te6edf3create_module_basescreenTb4b4b4(Tb4b4b4)
T8b949e# Create package `NameProject/Utility`.
Te6edf3create_package_utilityTb4b4b4(Tb4b4b4)
T8b949e# Create file `NameProject/Makefile`.
Tff7b72if Te6edf3use_localization Tff7b72== Ta5d6ff"Ta5d6ffyesTa5d6ff"Tb4b4b4:
T8b949e# Create makefile data.
Te6edf3create_makefileTb4b4b4(Tb4b4b4)
Te6edf3create_requirementsTb4b4b4(Tb4b4b4)
Te6edf3osTff7b72.Td2a8ffmakedirsTb4b4b4(Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Te6edf3path_to_projectTb4b4b4, Ta5d6ff"Ta5d6ffassetsTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffimagesTa5d6ff"Tb4b4b4)Tb4b4b4)
Te6edf3osTff7b72.Td2a8ffmkdirTb4b4b4(Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Te6edf3path_to_projectTb4b4b4, Ta5d6ff"Ta5d6ffassetsTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6fffontsTa5d6ff"Tb4b4b4)Tb4b4b4)
Tff7b72if Te6edf3name_database Tff7b72!= Ta5d6ff"Ta5d6ffnoTa5d6ff"Tb4b4b4:
Te6edf3check_databasesTb4b4b4(Tb4b4b4)
Tff7b72if Te6edf3use_hotreload Tff7b72== Ta5d6ff"Ta5d6ffyesTa5d6ff"Tb4b4b4:
Te6edf3create_main_with_hotreloadTb4b4b4(Tb4b4b4)
Tff7b72with Tffa657openTb4b4b4(
Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Te6edf3path_to_projectTb4b4b4, Ta5d6ff"Ta5d6ffrequirements.txtTa5d6ff"Tb4b4b4)Tb4b4b4,
Ta5d6ff"Ta5d6ffaTa5d6ff"Tb4b4b4,
Te6edf3encodingTff7b72=Ta5d6ff"Ta5d6ffutf-8Ta5d6ff"Tb4b4b4,
Tb4b4b4) Tff7b72as Te6edf3requirementsTb4b4b4:
Te6edf3requirementsTff7b72.Td2a8ffwriteTb4b4b4(Ta5d6ff"Ta5d6ffwatchdogTa5d6ff"Tb4b4b4)
Tff7b72if Te6edf3use_localization Tff7b72== Ta5d6ff"Ta5d6ffyesTa5d6ff"Tb4b4b4:
Te6edf3LoggerTff7b72.Td2a8ffinfoTb4b4b4(Ta5d6ff"Ta5d6ffKivyMD: Create localization files...Ta5d6ff"Tb4b4b4)
Te6edf3osTff7b72.Td2a8ffchdirTb4b4b4(Te6edf3path_to_projectTb4b4b4)
Te6edf3osTff7b72.Td2a8ffsystemTb4b4b4(Ta5d6ff"Ta5d6ffmake poTa5d6ff"Tb4b4b4)
Te6edf3osTff7b72.Td2a8ffsystemTb4b4b4(Ta5d6ff"Ta5d6ffmake moTa5d6ff"Tb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3osTff7b72.Td2a8ffremoveTb4b4b4(Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Te6edf3path_to_projectTb4b4b4, Ta5d6ff"Ta5d6ffmessages.potTa5d6ff"Tb4b4b4)Tb4b4b4)
Te6edf3osTff7b72.Td2a8ffremoveTb4b4b4(Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Te6edf3path_to_projectTb4b4b4, Ta5d6ff"Ta5d6fflibsTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6fftranslation.pyTa5d6ff"Tb4b4b4)Tb4b4b4)
Te6edf3shutilTff7b72.Td2a8ffrmtreeTb4b4b4(Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Te6edf3path_to_projectTb4b4b4, Ta5d6ff"Ta5d6ffdataTa5d6ff"Tb4b4b4)Tb4b4b4)
Te6edf3LoggerTff7b72.Td2a8ffinfoTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffKivyMD: Project Ta5d6ff'Tffd700{Te6edf3path_to_projectTffd700}Ta5d6ff'Ta5d6ff createdTa5d6ff"Tb4b4b4)
Te6edf3LoggerTff7b72.Td2a8ffinfoTb4b4b4(
Ta5d6fffTa5d6ff"Ta5d6ffKivyMD: Create a virtual environment for Ta5d6ff'Tffd700{Te6edf3path_to_projectTffd700}Ta5d6ff'Ta5d6ff project...Ta5d6ff"
Tb4b4b4)
Te6edf3create_virtual_environmentTb4b4b4(Tb4b4b4)
Te6edf3LoggerTff7b72.Td2a8ffinfoTb4b4b4(
Ta5d6fffTa5d6ff"Ta5d6ffKivyMD: Install requirements for Ta5d6ff'Tffd700{Te6edf3path_to_projectTffd700}Ta5d6ff'Ta5d6ff project...Ta5d6ff"
Tb4b4b4)
Te6edf3install_requirementsTb4b4b4(Tb4b4b4)
Te6edf3osTff7b72.Td2a8ffremoveTb4b4b4(Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Te6edf3path_to_projectTb4b4b4, Ta5d6ff"Ta5d6ff__init__.pyTa5d6ff"Tb4b4b4)Tb4b4b4)
Tff7b72if Te6edf3name_database Tff7b72== Ta5d6ff"Ta5d6ffnoTa5d6ff"Tb4b4b4:
Te6edf3osTff7b72.Td2a8ffremoveTb4b4b4(
Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Te6edf3path_to_projectTb4b4b4, Ta5d6ff"Ta5d6ffModelTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffdatabase_firebase.pyTa5d6ff"Tb4b4b4)
Tb4b4b4)
Te6edf3osTff7b72.Td2a8ffremoveTb4b4b4(
Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Te6edf3path_to_projectTb4b4b4, Ta5d6ff"Ta5d6ffModelTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffdatabase_restdb.pyTa5d6ff"Tb4b4b4)
Tb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3parserTff7b72.Td2a8fferrorTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffThe Tffd700{Te6edf3path_to_projectTffd700}Ta5d6ff project already existsTa5d6ff"Tb4b4b4)
Tff7b72def Td2a8ffcreate_main_with_hotreloadTb4b4b4(Tb4b4b4) Tff7b72-Tff7b72> Tff7b72NoneTb4b4b4:
Tff7b72with Tffa657openTb4b4b4(
Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Te6edf3path_to_projectTb4b4b4, Ta5d6ff"Ta5d6ffmain.pyTa5d6ff"Tb4b4b4)Tb4b4b4, Te6edf3encodingTff7b72=Ta5d6ff"Ta5d6ffutf-8Ta5d6ff"
Tb4b4b4) Tff7b72as Te6edf3main_fileTb4b4b4:
Te6edf3main_code Tff7b72= Ta5d6ff"Ta5d6ff"
Tff7b72for Te6edf3string Tff7b72in Te6edf3main_fileTff7b72.Td2a8ffreadlinesTb4b4b4(Tb4b4b4)Tb4b4b4:
Te6edf3main_code Tff7b72+Tff7b72= Ta5d6fffTa5d6ff"Ta5d6ff# Tffd700{Te6edf3stringTffd700}Ta5d6ff"
Tff7b72with Tffa657openTb4b4b4(
Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Te6edf3path_to_projectTb4b4b4, Ta5d6ff"Ta5d6ffmain.pyTa5d6ff"Tb4b4b4)Tb4b4b4, Ta5d6ff"Ta5d6ffwTa5d6ff"Tb4b4b4, Te6edf3encodingTff7b72=Ta5d6ff"Ta5d6ffutf-8Ta5d6ff"
Tb4b4b4) Tff7b72as Te6edf3main_fileTb4b4b4:
Te6edf3main_fileTff7b72.Td2a8ffwriteTb4b4b4(Ta5d6fffTa5d6ff"Tffd700{Te6edf3temp_hot_reload_mainTffd700}Tffea00\nTffd700{Te6edf3main_codeTffd700}Ta5d6ff"Tb4b4b4)
Tff7b72with Tffa657openTb4b4b4(
Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Te6edf3path_to_projectTb4b4b4, Ta5d6ff"Ta5d6ffmain.pyTa5d6ff"Tb4b4b4)Tb4b4b4, Te6edf3encodingTff7b72=Ta5d6ff"Ta5d6ffutf-8Ta5d6ff"
Tb4b4b4) Tff7b72as Te6edf3main_fileTb4b4b4:
Te6edf3main_code Tff7b72= Te6edf3main_fileTff7b72.Td2a8ffreadTb4b4b4(Tb4b4b4)
Te6edf3main_code Tff7b72= Te6edf3main_codeTff7b72.Td2a8ffformatTb4b4b4(
Ta5d6ff"Tffea00\nTa5d6fffrom kivy.properties import StringPropertyTffea00\nTa5d6ff"
Tff7b72if Te6edf3use_localization Tff7b72== Ta5d6ff"Ta5d6ffyesTa5d6ff"
Tff7b72else Ta5d6ff"Ta5d6ff"Tb4b4b4,
Ta5d6ff"Tffea00\nTa5d6fffrom Model.database import DataBaseTa5d6ff"
Tff7b72if Te6edf3name_database Tff7b72!= Ta5d6ff"Ta5d6ffnoTa5d6ff"
Tff7b72else Ta5d6ff"Ta5d6ff"Tb4b4b4,
Ta5d6ff"Tffea00\nTa5d6fffrom libs.translation import TranslationTffea00\nTa5d6ff"
Tff7b72if Te6edf3use_localization Tff7b72== Ta5d6ff"Ta5d6ffyesTa5d6ff"
Tff7b72else Ta5d6ff"Ta5d6ff"Tb4b4b4,
Te6edf3project_nameTb4b4b4,
Ta5d6ff'Tffea00\nTa5d6ff lang = StringProperty(Ta5d6ff"Ta5d6ffenTa5d6ff"Ta5d6ff)Tffea00\nTa5d6ff'
Tff7b72if Te6edf3use_localization Tff7b72== Ta5d6ff"Ta5d6ffyesTa5d6ff"
Tff7b72else Ta5d6ff"Ta5d6ff"Tb4b4b4,
Ta5d6ff"Tffea00\nTa5d6ff self.base = DataBase()Tffea00\nTa5d6ff"
Tff7b72if Te6edf3name_database Tff7b72!= Ta5d6ff"Ta5d6ffnoTa5d6ff"
Tff7b72else Ta5d6ff"Ta5d6ff"Tb4b4b4,
Ta5d6ff"Tffea00\nTa5d6ff self.translation = Translation(Tffea00\nTa5d6ff"
Ta5d6ff'Ta5d6ff self.lang, Ta5d6ff"Tffd700%sTa5d6ff"Ta5d6ff, os.path.join(self.directory, Ta5d6ff"Ta5d6ffdataTa5d6ff"Ta5d6ff, Ta5d6ff"Ta5d6fflocalesTa5d6ff"Ta5d6ff)Ta5d6ff'
Ta5d6ff"Tffea00\nTa5d6ff )Ta5d6ff" Tff7b72% Te6edf3project_name
Tff7b72if Te6edf3use_localization Tff7b72== Ta5d6ff"Ta5d6ffyesTa5d6ff"
Tff7b72else Ta5d6ff"Ta5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffself.databaseTa5d6ff" Tff7b72if Te6edf3name_database Tff7b72!= Ta5d6ff"Ta5d6ffnoTa5d6ff" Tff7b72else Ta5d6ff"Ta5d6ff"Tb4b4b4,
Ta5d6ff"Tffea00\nTffea00\nTa5d6ff def on_lang(self, instance_app, lang_value: str) -> None:Tffea00\nTa5d6ff"
Ta5d6ff"Ta5d6ff self.translation.switch_lang(lang_value)Tffea00\nTa5d6ff"
Tff7b72if Te6edf3use_localization Tff7b72== Ta5d6ff"Ta5d6ffyesTa5d6ff"
Tff7b72else Ta5d6ff"Ta5d6ff"Tb4b4b4,
Ta5d6ff"Tffea00\nTa5d6ff def switch_lang(self) -> None:Tffea00\nTa5d6ff"
Ta5d6ff'Ta5d6ff Ta5d6ff"Ta5d6ff"Ta5d6ff"Ta5d6ffSwitch lang.Ta5d6ff"Ta5d6ff"Ta5d6ff"Tffea00\nTffea00\nTa5d6ff'
Ta5d6ff'Ta5d6ff self.lang = Ta5d6ff"Ta5d6ffruTa5d6ff"Ta5d6ff if self.lang == Ta5d6ff"Ta5d6ffenTa5d6ff"Ta5d6ff else Ta5d6ff"Ta5d6ffenTa5d6ff"Ta5d6ff'
Tff7b72if Te6edf3use_localization Tff7b72== Ta5d6ff"Ta5d6ffyesTa5d6ff"
Tff7b72else Ta5d6ff"Ta5d6ff"Tb4b4b4,
Te6edf3project_nameTb4b4b4,
Tb4b4b4)
Tff7b72with Tffa657openTb4b4b4(
Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Te6edf3path_to_projectTb4b4b4, Ta5d6ff"Ta5d6ffmain.pyTa5d6ff"Tb4b4b4)Tb4b4b4, Ta5d6ff"Ta5d6ffwTa5d6ff"Tb4b4b4, Te6edf3encodingTff7b72=Ta5d6ff"Ta5d6ffutf-8Ta5d6ff"
Tb4b4b4) Tff7b72as Te6edf3main_moduleTb4b4b4:
Te6edf3main_moduleTff7b72.Td2a8ffwriteTb4b4b4(Te6edf3main_codeTb4b4b4)
Tff7b72def Td2a8ffcreate_mainTb4b4b4(Tb4b4b4) Tff7b72-Tff7b72> Tff7b72NoneTb4b4b4:
Te6edf3main_code Tff7b72= Te6edf3temp_mainTff7b72.Td2a8ffformatTb4b4b4(
Ta5d6ff"Tffea00\nTa5d6fffrom kivy.properties import StringPropertyTffea00\nTa5d6ff"
Tff7b72if Te6edf3use_localization Tff7b72== Ta5d6ff"Ta5d6ffyesTa5d6ff"
Tff7b72else Ta5d6ff"Ta5d6ff"Tb4b4b4,
Ta5d6ff"Tffea00\nTa5d6fffrom libs.translation import TranslationTa5d6ff"
Tff7b72if Te6edf3use_localization Tff7b72== Ta5d6ff"Ta5d6ffyesTa5d6ff"
Tff7b72else Ta5d6ff"Ta5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6fffrom Model.database import DataBaseTffea00\nTa5d6ff"
Tff7b72if Te6edf3name_database Tff7b72!= Ta5d6ff"Ta5d6ffnoTa5d6ff"
Tff7b72else Ta5d6ff"Ta5d6ff"Tb4b4b4,
Te6edf3project_nameTb4b4b4,
Ta5d6ff'Tffea00\nTa5d6ff lang = StringProperty(Ta5d6ff"Ta5d6ffenTa5d6ff"Ta5d6ff)Tffea00\nTa5d6ff'
Tff7b72if Te6edf3use_localization Tff7b72== Ta5d6ff"Ta5d6ffyesTa5d6ff"
Tff7b72else Ta5d6ff"Ta5d6ff"Tb4b4b4,
Ta5d6ff"Tffea00\nTa5d6ff self.translation = Translation(Tffea00\nTa5d6ff"
Ta5d6ff'Ta5d6ff self.lang, Ta5d6ff"Tffd700%sTa5d6ff"Ta5d6ff, os.path.join(self.directory, Ta5d6ff"Ta5d6ffdataTa5d6ff"Ta5d6ff, Ta5d6ff"Ta5d6fflocalesTa5d6ff"Ta5d6ff)Ta5d6ff'
Ta5d6ff"Tffea00\nTa5d6ff )Ta5d6ff" Tff7b72% Te6edf3project_name
Tff7b72if Te6edf3use_localization Tff7b72== Ta5d6ff"Ta5d6ffyesTa5d6ff"
Tff7b72else Ta5d6ff"Ta5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffself.database = DataBase()Tffea00\nTa5d6ff" Tff7b72if Te6edf3name_database Tff7b72!= Ta5d6ff"Ta5d6ffnoTa5d6ff" Tff7b72else Ta5d6ff"Ta5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffself.databaseTa5d6ff" Tff7b72if Te6edf3name_database Tff7b72!= Ta5d6ff"Ta5d6ffnoTa5d6ff" Tff7b72else Ta5d6ff"Ta5d6ff"Tb4b4b4,
Ta5d6ff"Tffea00\nTa5d6ff def on_lang(self, instance_app, lang_value: str) -> None:Tffea00\nTa5d6ff"
Ta5d6ff"Ta5d6ff self.translation.switch_lang(lang_value)Tffea00\nTa5d6ff"
Tff7b72if Te6edf3use_localization Tff7b72== Ta5d6ff"Ta5d6ffyesTa5d6ff"
Tff7b72else Ta5d6ff"Ta5d6ff"Tb4b4b4,
Ta5d6ff"Tffea00\nTa5d6ff def switch_lang(self) -> None:Tffea00\nTa5d6ff"
Ta5d6ff'Ta5d6ff Ta5d6ff"Ta5d6ff"Ta5d6ff"Ta5d6ffSwitch lang.Ta5d6ff"Ta5d6ff"Ta5d6ff"Tffea00\nTffea00\nTa5d6ff'
Ta5d6ff'Ta5d6ff self.lang = Ta5d6ff"Ta5d6ffruTa5d6ff"Ta5d6ff if self.lang == Ta5d6ff"Ta5d6ffenTa5d6ff"Ta5d6ff else Ta5d6ff"Ta5d6ffenTa5d6ff"Tffea00\nTa5d6ff'
Tff7b72if Te6edf3use_localization Tff7b72== Ta5d6ff"Ta5d6ffyesTa5d6ff"
Tff7b72else Ta5d6ff"Ta5d6ff"Tb4b4b4,
Te6edf3project_nameTb4b4b4,
Tb4b4b4)
Tff7b72with Tffa657openTb4b4b4(
Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Te6edf3path_to_projectTb4b4b4, Ta5d6ff"Ta5d6ffmain.pyTa5d6ff"Tb4b4b4)Tb4b4b4, Ta5d6ff"Ta5d6ffwTa5d6ff"Tb4b4b4, Te6edf3encodingTff7b72=Ta5d6ff"Ta5d6ffutf-8Ta5d6ff"
Tb4b4b4) Tff7b72as Te6edf3main_moduleTb4b4b4:
Te6edf3main_moduleTff7b72.Td2a8ffwriteTb4b4b4(Te6edf3main_codeTb4b4b4)
Tff7b72def Td2a8ffcreate_modelTb4b4b4(
Te6edf3name_screenTb4b4b4: Tffa657strTb4b4b4, Te6edf3module_nameTb4b4b4: Tffa657strTb4b4b4, Te6edf3name_databaseTb4b4b4: Tffa657strTb4b4b4, Te6edf3path_to_projectTb4b4b4: Tffa657str
Tb4b4b4) Tff7b72-Tff7b72> Tff7b72NoneTb4b4b4:
Tff7b72if Te6edf3name_database Tff7b72!= Ta5d6ff"Ta5d6ffnoTa5d6ff"Tb4b4b4:
Te6edf3code_model Tff7b72= Te6edf3temp_database_modelTff7b72.Td2a8ffformatTb4b4b4(
Te6edf3name_screenTff7b72=Te6edf3name_screenTb4b4b4,
Te6edf3module_nameTff7b72=Te6edf3module_nameTb4b4b4,
Te6edf3notify_name_screenTff7b72=Ta5d6fffTa5d6ff'Ta5d6ff"Tffd700{Ta5d6ff"Ta5d6ff Ta5d6ff"Tff7b72.Td2a8ffjoinTb4b4b4(Te6edf3module_nameTff7b72.Td2a8ffsplitTb4b4b4(Ta5d6ff"Ta5d6ff_Ta5d6ff"Tb4b4b4)Tb4b4b4)Tffd700}Ta5d6ff"Ta5d6ff'Tb4b4b4,
Tb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3code_model Tff7b72= Te6edf3temp_without_database_modelTff7b72.Td2a8ffformatTb4b4b4(
Te6edf3module_nameTff7b72=Te6edf3module_nameTb4b4b4, Te6edf3name_screenTff7b72=Te6edf3name_screen
Tb4b4b4)
Te6edf3model_module Tff7b72= Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Te6edf3path_to_projectTb4b4b4, Ta5d6ff"Ta5d6ffModelTa5d6ff"Tb4b4b4, Te6edf3module_nameTb4b4b4)
Tff7b72with Tffa657openTb4b4b4(Ta5d6fffTa5d6ff"Tffd700{Te6edf3model_moduleTffd700}Ta5d6ff.pyTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffwTa5d6ff"Tb4b4b4, Te6edf3encodingTff7b72=Ta5d6ff"Ta5d6ffutf-8Ta5d6ff"Tb4b4b4) Tff7b72as Te6edf3moduleTb4b4b4:
Te6edf3moduleTff7b72.Td2a8ffwriteTb4b4b4(Te6edf3code_modelTb4b4b4)
Tff7b72def Td2a8ffcreate_basemodelTb4b4b4(Tb4b4b4) Tff7b72-Tff7b72> Tff7b72NoneTb4b4b4:
Tff7b72with Tffa657openTb4b4b4(
Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Te6edf3path_to_projectTb4b4b4, Ta5d6ff"Ta5d6ffModelTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffbase_model.pyTa5d6ff"Tb4b4b4)Tb4b4b4,
Ta5d6ff"Ta5d6ffwTa5d6ff"Tb4b4b4,
Te6edf3encodingTff7b72=Ta5d6ff"Ta5d6ffutf-8Ta5d6ff"Tb4b4b4,
Tb4b4b4) Tff7b72as Te6edf3module_basemodelTb4b4b4:
Te6edf3module_basemodelTff7b72.Td2a8ffwriteTb4b4b4(Te6edf3temp_basemodelTb4b4b4)
Tff7b72def Td2a8ffcreate_module_basescreenTb4b4b4(Tb4b4b4) Tff7b72-Tff7b72> Tff7b72NoneTb4b4b4:
Tff7b72with Tffa657openTb4b4b4(
Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Te6edf3path_to_projectTb4b4b4, Ta5d6ff"Ta5d6ffViewTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffbase_screen.pyTa5d6ff"Tb4b4b4)Tb4b4b4,
Ta5d6ff"Ta5d6ffwTa5d6ff"Tb4b4b4,
Te6edf3encodingTff7b72=Ta5d6ff"Ta5d6ffutf-8Ta5d6ff"Tb4b4b4,
Tb4b4b4) Tff7b72as Te6edf3base_screenTb4b4b4:
Te6edf3base_screenTff7b72.Td2a8ffwriteTb4b4b4(Te6edf3temp_base_screenTb4b4b4)
Tff7b72def Td2a8ffcreate_controllerTb4b4b4(
Te6edf3name_screenTb4b4b4: Tffa657strTb4b4b4, Te6edf3module_nameTb4b4b4: Tffa657strTb4b4b4, Te6edf3use_hotreloadTb4b4b4: Tffa657strTb4b4b4, Te6edf3path_to_projectTb4b4b4: Tffa657str
Tb4b4b4) Tff7b72-Tff7b72> Tff7b72NoneTb4b4b4:
Te6edf3name_view Tff7b72= Tb4b4b4(
Ta5d6fffTa5d6ff"Ta5d6ffView.Tffd700{Te6edf3name_screenTffd700}Ta5d6ff.Tffd700{Te6edf3module_nameTffd700}Ta5d6ff.Tffd700{Te6edf3name_screenTffd700}Ta5d6ffViewTa5d6ff"
Tff7b72if Te6edf3use_hotreload Tff7b72== Ta5d6ff"Ta5d6ffyesTa5d6ff"
Tff7b72else Ta5d6fffTa5d6ff"Tffd700{Te6edf3name_screenTffd700}Ta5d6ffViewTa5d6ff"
Tb4b4b4)
Te6edf3code_controller Tff7b72= Te6edf3temp_code_controllerTff7b72.Td2a8ffformatTb4b4b4(
Te6edf3name_screenTff7b72=Te6edf3name_screenTb4b4b4,
Te6edf3module_nameTff7b72=Te6edf3module_nameTb4b4b4,
Te6edf3import_moduleTff7b72=Ta5d6ff"Ta5d6ff"
Ta5d6fffTa5d6ff"Ta5d6ffimport importlibTffea00\nTffea00\nTa5d6ff"
Ta5d6fffTa5d6ff"Ta5d6ffimport View.Tffd700{Te6edf3name_screenTffd700}Ta5d6ff.Tffd700{Te6edf3module_nameTffd700}Tffea00\nTffea00\nTa5d6ff"
Ta5d6fffTa5d6ff"Ta5d6ff# We have to manually reload the view module in order to apply theTffea00\nTa5d6ff"
Ta5d6fffTa5d6ff"Ta5d6ff# changes made to the code on a subsequent hot reload.Tffea00\nTa5d6ff"
Ta5d6fffTa5d6ff"Ta5d6ff# If you no longer need a hot reload, you can delete this instruction.Tffea00\nTa5d6ff"
Ta5d6fffTa5d6ff"Ta5d6ffimportlib.reload(View.Tffd700{Te6edf3name_screenTffd700}Ta5d6ff.Tffd700{Te6edf3module_nameTffd700}Ta5d6ff)Tffea00\nTffea00\nTa5d6ff"
Tff7b72if Te6edf3use_hotreload Tff7b72== Ta5d6ff"Ta5d6ffyesTa5d6ff"
Tff7b72else Ta5d6fffTa5d6ff"Tffea00\nTa5d6fffrom View.Tffd700{Te6edf3name_screenTffd700}Ta5d6ff.Tffd700{Te6edf3module_nameTffd700}Ta5d6ff import Tffd700{Te6edf3name_screenTffd700}Ta5d6ffViewTa5d6ff"Tb4b4b4,
Te6edf3name_viewTff7b72=Te6edf3name_viewTb4b4b4,
Te6edf3get_viewTff7b72=Ta5d6fffTa5d6ff"Ta5d6ffView.Tffd700{Te6edf3name_screenTffd700}Ta5d6ff.Tffd700{Te6edf3module_nameTffd700}Ta5d6ff"
Tff7b72if Te6edf3use_hotreload Tff7b72== Ta5d6ff"Ta5d6ffyesTa5d6ff"
Tff7b72else Ta5d6fffTa5d6ff"Tffd700{Te6edf3name_screenTffd700}Ta5d6ffViewTa5d6ff"Tb4b4b4,
Tb4b4b4)
Te6edf3path_to_controller Tff7b72= Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Te6edf3path_to_projectTb4b4b4, Ta5d6ff"Ta5d6ffControllerTa5d6ff"Tb4b4b4)
Tff7b72if Tff7b72not Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffexistsTb4b4b4(Te6edf3path_to_controllerTb4b4b4)Tb4b4b4:
Te6edf3osTff7b72.Td2a8ffmkdirTb4b4b4(Te6edf3path_to_controllerTb4b4b4)
Te6edf3controller_module Tff7b72= Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Te6edf3path_to_projectTb4b4b4, Ta5d6ff"Ta5d6ffControllerTa5d6ff"Tb4b4b4, Te6edf3module_nameTb4b4b4)
Tff7b72with Tffa657openTb4b4b4(Ta5d6fffTa5d6ff"Tffd700{Te6edf3controller_moduleTffd700}Ta5d6ff.pyTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffwTa5d6ff"Tb4b4b4, Te6edf3encodingTff7b72=Ta5d6ff"Ta5d6ffutf-8Ta5d6ff"Tb4b4b4) Tff7b72as Te6edf3moduleTb4b4b4:
Te6edf3moduleTff7b72.Td2a8ffwriteTb4b4b4(Te6edf3code_controllerTb4b4b4)
Tff7b72def Td2a8ffcreate_makefileTb4b4b4(Tb4b4b4) Tff7b72-Tff7b72> Tff7b72NoneTb4b4b4:
Te6edf3makefile Tff7b72= Te6edf3temp_makefileTff7b72.Td2a8ffformatTb4b4b4(Te6edf3temp_makefile_filesTb4b4b4[Tb4b4b4:Tff7b72-T79c0ff2Tb4b4b4]Tb4b4b4)
Tff7b72with Tffa657openTb4b4b4(
Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Te6edf3path_to_projectTb4b4b4, Ta5d6ff"Ta5d6ffMakefileTa5d6ff"Tb4b4b4)Tb4b4b4, Ta5d6ff"Ta5d6ffwTa5d6ff"Tb4b4b4, Te6edf3encodingTff7b72=Ta5d6ff"Ta5d6ffutf-8Ta5d6ff"
Tb4b4b4) Tff7b72as Te6edf3make_fileTb4b4b4:
Te6edf3make_fileTff7b72.Td2a8ffwriteTb4b4b4(Te6edf3makefileTb4b4b4)
Tff7b72def Td2a8ffcreate_makefile_dataTb4b4b4(Te6edf3name_screenTb4b4b4: Tffa657strTb4b4b4, Te6edf3module_nameTb4b4b4: Tffa657strTb4b4b4) Tff7b72-Tff7b72> Tff7b72NoneTb4b4b4:
Tff7b72global Te6edf3temp_makefile_files
Te6edf3temp_makefile_files Tff7b72+Tff7b72= Tb4b4b4(
Ta5d6fffTa5d6ff"Ta5d6ff View/Tffd700{Te6edf3name_screenTffd700}Ta5d6ff/Tffd700{Te6edf3module_nameTffd700}Ta5d6ff.py Tffea00\\Tffea00\nTa5d6ff"
Tb4b4b4)
Te6edf3temp_makefile_files Tff7b72+Tff7b72= Tb4b4b4(
Ta5d6fffTa5d6ff"Ta5d6ff View/Tffd700{Te6edf3name_screenTffd700}Ta5d6ff/Tffd700{Te6edf3module_nameTffd700}Ta5d6ff.kv Tffea00\\Tffea00\nTa5d6ff"
Tb4b4b4)
Tff7b72def Td2a8ffcreate_screens_dataTb4b4b4(Te6edf3name_screenTb4b4b4: Tffa657strTb4b4b4, Te6edf3module_nameTb4b4b4: Tffa657strTb4b4b4) Tff7b72-Tff7b72> Tff7b72NoneTb4b4b4:
Tff7b72global Te6edf3temp_screens_imports
Tff7b72global Te6edf3temp_screens_data
Te6edf3temp_screens_imports Tff7b72+Tff7b72= Tb4b4b4(
Ta5d6fffTa5d6ff"Ta5d6fffrom Model.Tffd700{Te6edf3module_nameTffd700}Ta5d6ff import Tffd700{Te6edf3name_screenTffd700}Ta5d6ffModelTffea00\nTa5d6ff"
Ta5d6fffTa5d6ff"Ta5d6fffrom Controller.Tffd700{Te6edf3module_nameTffd700}Ta5d6ff import Tffd700{Te6edf3name_screenTffd700}Ta5d6ffControllerTffea00\nTa5d6ff"
Tb4b4b4)
Te6edf3temp_screens_data Tff7b72+Tff7b72= Tb4b4b4(
Ta5d6ff'Tffea00\nTa5d6ff Tffd700%sTa5d6ff: Ta5d6ff{Tffea00\nTa5d6ff Ta5d6ff"Ta5d6ffmodelTa5d6ff"Ta5d6ff: Tffd700%sTa5d6ff,Ta5d6ff'
Ta5d6ff'Tffea00\nTa5d6ff Ta5d6ff"Ta5d6ffcontrollerTa5d6ff"Ta5d6ff: Tffd700%sTa5d6ff,Tffea00\nTa5d6ff },Tffea00\nTa5d6ff'
Tff7b72% Tb4b4b4(
Ta5d6fffTa5d6ff'Ta5d6ff"Tffd700{Ta5d6ff"Ta5d6ff Ta5d6ff"Tff7b72.Td2a8ffjoinTb4b4b4(Te6edf3module_nameTff7b72.Td2a8ffsplitTb4b4b4(Ta5d6ff"Ta5d6ff_Ta5d6ff"Tb4b4b4)Tb4b4b4)Tffd700}Ta5d6ff"Ta5d6ff'Tb4b4b4,
Ta5d6fffTa5d6ff"Tffd700{Te6edf3name_screenTffd700}Ta5d6ffModelTa5d6ff"Tb4b4b4,
Ta5d6fffTa5d6ff"Tffd700{Te6edf3name_screenTffd700}Ta5d6ffControllerTa5d6ff"Tb4b4b4,
Tb4b4b4)
Tb4b4b4)
Tff7b72def Td2a8ffcreate_module_screensTb4b4b4(Tb4b4b4) Tff7b72-Tff7b72> Tff7b72NoneTb4b4b4:
Te6edf3path_to_module_screens Tff7b72= Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Te6edf3path_to_projectTb4b4b4, Ta5d6ff"Ta5d6ffViewTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffscreens.pyTa5d6ff"Tb4b4b4)
Tff7b72with Tffa657openTb4b4b4(Te6edf3path_to_module_screensTb4b4b4, Ta5d6ff"Ta5d6ffwTa5d6ff"Tb4b4b4, Te6edf3encodingTff7b72=Ta5d6ff"Ta5d6ffutf-8Ta5d6ff"Tb4b4b4) Tff7b72as Te6edf3module_screensTb4b4b4:
Te6edf3module_screensTff7b72.Td2a8ffwriteTb4b4b4(
Ta5d6ff"Tffd700%sTffea00\nTa5d6ffscreens = Ta5d6ff{Tffd700%sTa5d6ff}Ta5d6ff" Tff7b72% Tb4b4b4(Te6edf3temp_screens_importsTb4b4b4, Te6edf3temp_screens_dataTb4b4b4)
Tb4b4b4)
Tff7b72def Td2a8ffcreate_common_responsive_moduleTb4b4b4(
Te6edf3use_responsiveTb4b4b4: Tffa657listTb4b4b4, Te6edf3path_to_projectTb4b4b4: Tffa657str
Tb4b4b4) Tff7b72-Tff7b72> Tff7b72NoneTb4b4b4:
Tff7b72for Te6edf3name_screen Tff7b72in Te6edf3use_responsiveTb4b4b4:
Te6edf3path_to_init_common Tff7b72= Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(
Te6edf3path_to_projectTb4b4b4, Ta5d6ff"Ta5d6ffViewTa5d6ff"Tb4b4b4, Te6edf3name_screenTb4b4b4, Ta5d6ff"Ta5d6ffcomponentsTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffcommonTa5d6ff"
Tb4b4b4)
Te6edf3osTff7b72.Td2a8ffmakedirsTb4b4b4(Te6edf3path_to_init_commonTb4b4b4)
Tff7b72with Tffa657openTb4b4b4(
Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Te6edf3path_to_init_commonTb4b4b4, Ta5d6ff"Ta5d6ff__init__.pyTa5d6ff"Tb4b4b4)Tb4b4b4,
Ta5d6ff"Ta5d6ffwTa5d6ff"Tb4b4b4,
Te6edf3encodingTff7b72=Ta5d6ff"Ta5d6ffutf-8Ta5d6ff"Tb4b4b4,
Tb4b4b4) Tff7b72as Te6edf3init_common_componentsTb4b4b4:
Te6edf3init_common_componentsTff7b72.Td2a8ffwriteTb4b4b4(
Ta5d6ff"Ta5d6ff# This directory is for common responsive design componentsTffea00\nTa5d6ff"
Tb4b4b4)
Tff7b72def Td2a8ffcreate_viewTb4b4b4(
Te6edf3name_screenTb4b4b4: Tffa657strTb4b4b4,
Te6edf3module_nameTb4b4b4: Tffa657strTb4b4b4,
Te6edf3use_responsiveTb4b4b4: Tffa657listTb4b4b4,
Te6edf3path_to_projectTb4b4b4: Tffa657strTb4b4b4,
Tb4b4b4) Tff7b72-Tff7b72> Tff7b72NoneTb4b4b4:
Te6edf3path_to_view Tff7b72= Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Te6edf3path_to_projectTb4b4b4, Ta5d6ff"Ta5d6ffViewTa5d6ff"Tb4b4b4, Te6edf3name_screenTb4b4b4)
Te6edf3path_to_components Tff7b72= Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Te6edf3path_to_viewTb4b4b4, Ta5d6ff"Ta5d6ffcomponentsTa5d6ff"Tb4b4b4)
Te6edf3view_module Tff7b72= Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Te6edf3path_to_viewTb4b4b4, Te6edf3module_nameTb4b4b4)
Te6edf3osTff7b72.Td2a8ffmakedirsTb4b4b4(Te6edf3path_to_viewTb4b4b4)
Te6edf3osTff7b72.Td2a8ffmakedirsTb4b4b4(Te6edf3path_to_componentsTb4b4b4)
Tff7b72with Tffa657openTb4b4b4(
Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Te6edf3path_to_viewTb4b4b4, Ta5d6ff"Ta5d6ff__init__.pyTa5d6ff"Tb4b4b4)Tb4b4b4, Ta5d6ff"Ta5d6ffwTa5d6ff"Tb4b4b4, Te6edf3encodingTff7b72=Ta5d6ff"Ta5d6ffutf-8Ta5d6ff"
Tb4b4b4) Tff7b72as Te6edf3init_moduleTb4b4b4:
Te6edf3init_moduleTff7b72.Td2a8ffwriteTb4b4b4(Ta5d6ff"Ta5d6ff"Tb4b4b4)
Tff7b72with Tffa657openTb4b4b4(Ta5d6fffTa5d6ff"Tffd700{Te6edf3view_moduleTffd700}Ta5d6ff.pyTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffwTa5d6ff"Tb4b4b4, Te6edf3encodingTff7b72=Ta5d6ff"Ta5d6ffutf-8Ta5d6ff"Tb4b4b4) Tff7b72as Te6edf3view_fileTb4b4b4:
Te6edf3view_fileTff7b72.Td2a8ffwriteTb4b4b4(
Te6edf3temp_code_viewTff7b72.Td2a8ffformatTb4b4b4(Te6edf3name_screenTff7b72=Te6edf3name_screenTb4b4b4)
Tff7b72if Te6edf3name_screen Tff7b72not Tff7b72in Te6edf3use_responsive
Tff7b72else Te6edf3temp_code_responsive_viewTff7b72.Td2a8ffformatTb4b4b4(Te6edf3name_screenTff7b72=Te6edf3name_screenTb4b4b4)
Tb4b4b4)
Tff7b72if Te6edf3name_screen Tff7b72in Te6edf3use_responsiveTb4b4b4:
Tff7b72for Te6edf3name_platform Tff7b72in Tb4b4b4[Ta5d6ff"Ta5d6ffDesktopScreenTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffMobileScreenTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffTabletScreenTa5d6ff"Tb4b4b4]Tb4b4b4:
Te6edf3path_to_init_components Tff7b72= Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(
Te6edf3path_to_projectTb4b4b4,
Ta5d6ff"Ta5d6ffViewTa5d6ff"Tb4b4b4,
Te6edf3name_screenTb4b4b4,
Ta5d6ff"Ta5d6ffcomponentsTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ff__init__.pyTa5d6ff"Tb4b4b4,
Tb4b4b4)
Te6edf3path_to_platforms Tff7b72= Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(
Te6edf3path_to_projectTb4b4b4, Ta5d6ff"Ta5d6ffViewTa5d6ff"Tb4b4b4, Te6edf3name_screenTb4b4b4, Ta5d6ff"Ta5d6ffcomponentsTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffplatformsTa5d6ff"
Tb4b4b4)
Te6edf3path_to_platform Tff7b72= Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Te6edf3path_to_platformsTb4b4b4, Te6edf3name_platformTb4b4b4)
Te6edf3path_to_platform_components Tff7b72= Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(
Te6edf3path_to_platformTb4b4b4, Ta5d6ff"Ta5d6ffcomponentsTa5d6ff"
Tb4b4b4)
Te6edf3osTff7b72.Td2a8ffmakedirsTb4b4b4(Te6edf3path_to_platform_componentsTb4b4b4)
Te6edf3shutilTff7b72.Td2a8ffcopyTb4b4b4(
Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Te6edf3path_to_viewTb4b4b4, Ta5d6ff"Ta5d6ff__init__.pyTa5d6ff"Tb4b4b4)Tb4b4b4,
Te6edf3path_to_platform_componentsTb4b4b4,
Tb4b4b4)
Te6edf3shutilTff7b72.Td2a8ffcopyTb4b4b4(
Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Te6edf3path_to_viewTb4b4b4, Ta5d6ff"Ta5d6ff__init__.pyTa5d6ff"Tb4b4b4)Tb4b4b4, Te6edf3path_to_platforms
Tb4b4b4)
Te6edf3name_platform_module Tff7b72= Tb4b4b4(
Ta5d6fffTa5d6ff'Tffd700{Te6edf3name_platformTff7b72.Td2a8ffsplitTb4b4b4(Ta5d6ff"Ta5d6ffScreenTa5d6ff"Tb4b4b4)Tb4b4b4[T79c0ff0Tb4b4b4]Tff7b72.Td2a8fflowerTb4b4b4(Tb4b4b4)Tffd700}Ta5d6ff_screenTa5d6ff'
Tb4b4b4)
Tff7b72with Tffa657openTb4b4b4(
Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Te6edf3path_to_platformTb4b4b4, Ta5d6fffTa5d6ff"Tffd700{Te6edf3name_platform_moduleTffd700}Ta5d6ff.kvTa5d6ff"Tb4b4b4)Tb4b4b4,
Ta5d6ff"Ta5d6ffwTa5d6ff"Tb4b4b4,
Te6edf3encodingTff7b72=Ta5d6ff"Ta5d6ffutf-8Ta5d6ff"Tb4b4b4,
Tb4b4b4) Tff7b72as Te6edf3platform_ruleTb4b4b4:
Te6edf3platform_ruleTff7b72.Td2a8ffwriteTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ff<Tffd700{Te6edf3name_platformTffd700}Ta5d6ffView>Tffea00\nTa5d6ff"Tb4b4b4)
Tff7b72with Tffa657openTb4b4b4(
Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Te6edf3path_to_platformTb4b4b4, Ta5d6fffTa5d6ff"Tffd700{Te6edf3name_platform_moduleTffd700}Ta5d6ff.pyTa5d6ff"Tb4b4b4)Tb4b4b4,
Ta5d6ff"Ta5d6ffwTa5d6ff"Tb4b4b4,
Te6edf3encodingTff7b72=Ta5d6ff"Ta5d6ffutf-8Ta5d6ff"Tb4b4b4,
Tb4b4b4) Tff7b72as Te6edf3platform_baseclassTb4b4b4:
Te6edf3platform_baseclassTff7b72.Td2a8ffwriteTb4b4b4(
Te6edf3temp_responsive_platform_baseclassTff7b72.Td2a8ffformatTb4b4b4(Te6edf3name_platformTb4b4b4)
Tb4b4b4)
Tff7b72with Tffa657openTb4b4b4(
Te6edf3path_to_init_componentsTb4b4b4, Ta5d6ff"Ta5d6ffwTa5d6ff"Tb4b4b4, Te6edf3encodingTff7b72=Ta5d6ff"Ta5d6ffutf-8Ta5d6ff"
Tb4b4b4) Tff7b72as Te6edf3init_componentsTb4b4b4:
Te6edf3init_componentsTff7b72.Td2a8ffwriteTb4b4b4(Te6edf3temp_responsive_component_importsTb4b4b4)
Tff7b72with Tffa657openTb4b4b4(Ta5d6fffTa5d6ff"Tffd700{Te6edf3view_moduleTffd700}Ta5d6ff.kvTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffwTa5d6ff"Tb4b4b4, Te6edf3encodingTff7b72=Ta5d6ff"Ta5d6ffutf-8Ta5d6ff"Tb4b4b4) Tff7b72as Te6edf3view_fileTb4b4b4:
Te6edf3view_fileTff7b72.Td2a8ffwriteTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ff<Tffd700{Te6edf3name_screenTffd700}Ta5d6ffView>Tffea00\nTa5d6ff"Tb4b4b4)
Tff7b72if Te6edf3name_screen Tff7b72not Tff7b72in Te6edf3use_responsiveTb4b4b4:
Te6edf3shutilTff7b72.Td2a8ffcopyTb4b4b4(
Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Te6edf3path_to_viewTb4b4b4, Ta5d6ff"Ta5d6ff__init__.pyTa5d6ff"Tb4b4b4)Tb4b4b4, Te6edf3path_to_components
Tb4b4b4)
Tff7b72def Td2a8ffcreate_package_utilityTb4b4b4(Tb4b4b4) Tff7b72-Tff7b72> Tff7b72NoneTb4b4b4:
Te6edf3path_to_utility Tff7b72= Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Te6edf3path_to_projectTb4b4b4, Ta5d6ff"Ta5d6ffUtilityTa5d6ff"Tb4b4b4)
Te6edf3osTff7b72.Td2a8ffmkdirTb4b4b4(Te6edf3path_to_utilityTb4b4b4)
Tff7b72with Tffa657openTb4b4b4(
Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Te6edf3path_to_utilityTb4b4b4, Ta5d6ff"Ta5d6ff__init__.pyTa5d6ff"Tb4b4b4)Tb4b4b4, Ta5d6ff"Ta5d6ffwTa5d6ff"Tb4b4b4, Te6edf3encodingTff7b72=Ta5d6ff"Ta5d6ffutf-8Ta5d6ff"
Tb4b4b4) Tff7b72as Te6edf3init_moduleTb4b4b4:
Te6edf3init_moduleTff7b72.Td2a8ffwriteTb4b4b4(Ta5d6ff"Ta5d6ff"Tb4b4b4)
Tff7b72with Tffa657openTb4b4b4(
Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Te6edf3path_to_utilityTb4b4b4, Ta5d6ff"Ta5d6ffobserver.pyTa5d6ff"Tb4b4b4)Tb4b4b4, Ta5d6ff"Ta5d6ffwTa5d6ff"Tb4b4b4, Te6edf3encodingTff7b72=Ta5d6ff"Ta5d6ffutf-8Ta5d6ff"
Tb4b4b4) Tff7b72as Te6edf3observerTb4b4b4:
Te6edf3observerTff7b72.Td2a8ffwriteTb4b4b4(Te6edf3temp_utilityTb4b4b4)
Tff7b72def Td2a8ffcreate_requirementsTb4b4b4(Tb4b4b4) Tff7b72-Tff7b72> Tff7b72NoneTb4b4b4:
Tff7b72with Tffa657openTb4b4b4(
Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Te6edf3path_to_projectTb4b4b4, Ta5d6ff"Ta5d6ffrequirements.txtTa5d6ff"Tb4b4b4)Tb4b4b4, Ta5d6ff"Ta5d6ffwTa5d6ff"Tb4b4b4, Te6edf3encodingTff7b72=Ta5d6ff"Ta5d6ffutf-8Ta5d6ff"
Tb4b4b4) Tff7b72as Te6edf3requirementsTb4b4b4:
Te6edf3requirementsTff7b72.Td2a8ffwriteTb4b4b4(
Te6edf3firebase_requirements
Tff7b72if Te6edf3name_database Tff7b72== Ta5d6ff"Ta5d6fffirebaseTa5d6ff"
Tff7b72else Te6edf3without_firebase_requirements
Tb4b4b4)
Tff7b72def Td2a8ffcreate_virtual_environmentTb4b4b4(Tb4b4b4) Tff7b72-Tff7b72> Tff7b72NoneTb4b4b4:
Te6edf3osTff7b72.Td2a8ffsystemTb4b4b4(Ta5d6fffTa5d6ff"Tffd700{Te6edf3python_versionTffd700}Ta5d6ff -m pip install virtualenvTa5d6ff"Tb4b4b4)
Te6edf3osTff7b72.Td2a8ffsystemTb4b4b4(
Ta5d6fffTa5d6ff"Ta5d6ffvirtualenv -p Tffd700{Te6edf3python_versionTffd700}Ta5d6ff Tffd700{Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Te6edf3path_to_projectTb4b4b4, Ta5d6ff'Ta5d6ffvenvTa5d6ff'Tb4b4b4)Tffd700}Ta5d6ff"
Tb4b4b4)
Tff7b72def Td2a8ffinstall_requirementsTb4b4b4(Tb4b4b4) Tff7b72-Tff7b72> Tff7b72NoneTb4b4b4:
Te6edf3python Tff7b72= Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Te6edf3path_to_projectTb4b4b4, Ta5d6ff"Ta5d6ffvenvTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffbinTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffpython3Ta5d6ff"Tb4b4b4)
Tff7b72if Te6edf3kivy_version Tff7b72== Ta5d6ff"Ta5d6ffmasterTa5d6ff"Tb4b4b4:
Tff7b72if Te6edf3platform Tff7b72== Ta5d6ff"Ta5d6ffmacosxTa5d6ff"Tb4b4b4:
Te6edf3osTff7b72.Td2a8ffsystemTb4b4b4(
Ta5d6fffTa5d6ff"Tffd700{Te6edf3pythonTffd700}Ta5d6ff -m pip install Ta5d6ff'Ta5d6ffkivy[base] @ https://github.com/kivy/kivy/archive/master.zipTa5d6ff'Ta5d6ff"
Tb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3osTff7b72.Td2a8ffsystemTb4b4b4(
Ta5d6fffTa5d6ff"Tffd700{Te6edf3pythonTffd700}Ta5d6ff -m pip install https://github.com/kivy/kivy/archive/master.zipTa5d6ff"
Tb4b4b4)
Tff7b72elif Te6edf3kivy_version Tff7b72== Ta5d6ff"Ta5d6ffstableTa5d6ff"Tb4b4b4:
Te6edf3osTff7b72.Td2a8ffsystemTb4b4b4(Ta5d6fffTa5d6ff"Tffd700{Te6edf3pythonTffd700}Ta5d6ff -m pip install kivyTa5d6ff"Tb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3osTff7b72.Td2a8ffsystemTb4b4b4(Ta5d6fffTa5d6ff"Tffd700{Te6edf3pythonTffd700}Ta5d6ff -m pip install kivy==Tffd700{Te6edf3kivy_versionTffd700}Ta5d6ff"Tb4b4b4)
Te6edf3osTff7b72.Td2a8ffsystemTb4b4b4(
Ta5d6fffTa5d6ff"Tffd700{Te6edf3pythonTffd700}Ta5d6ff -m pip install https://github.com/kivymd/KivyMD/archive/master.zipTa5d6ff"
Tb4b4b4)
Te6edf3osTff7b72.Td2a8ffsystemTb4b4b4(Ta5d6fffTa5d6ff"Tffd700{Te6edf3pythonTffd700}Ta5d6ff -m pip install watchdogTa5d6ff"Tb4b4b4)
Tff7b72if Te6edf3name_database Tff7b72== Ta5d6ff"Ta5d6fffirebaseTa5d6ff"Tb4b4b4:
Te6edf3osTff7b72.Td2a8ffsystemTb4b4b4(
Ta5d6fffTa5d6ff"Tffd700{Te6edf3pythonTffd700}Ta5d6ff -m pip install Ta5d6ff"
Ta5d6fffTa5d6ff"Ta5d6ffmultitasking Ta5d6ff"
Ta5d6fffTa5d6ff"Ta5d6fffirebase Ta5d6ff"
Ta5d6fffTa5d6ff"Ta5d6fffirebase-admin Ta5d6ff"
Ta5d6fffTa5d6ff"Ta5d6ffpython_jwt Ta5d6ff"
Ta5d6fffTa5d6ff"Ta5d6ffgcloud Ta5d6ff"
Ta5d6fffTa5d6ff"Ta5d6ffsseclient Ta5d6ff"
Ta5d6fffTa5d6ff"Ta5d6ffpycryptodome==3.4.3 Ta5d6ff"
Ta5d6fffTa5d6ff"Ta5d6ffrequests_toolbelt Ta5d6ff"
Ta5d6fffTa5d6ff"Ta5d6ffwatchdog Ta5d6ff"
Tb4b4b4)
Te6edf3osTff7b72.Td2a8ffsystemTb4b4b4(
Ta5d6fffTa5d6ff"Tffd700{Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Te6edf3path_to_projectTb4b4b4, Ta5d6ff'Ta5d6ffvenvTa5d6ff'Tb4b4b4, Ta5d6ff'Ta5d6ffbinTa5d6ff'Tb4b4b4, Ta5d6ff'Ta5d6ffpython3Ta5d6ff'Tb4b4b4)Tffd700}Ta5d6ff -m pip listTa5d6ff"
Tb4b4b4)
Tff7b72def Td2a8ffcheck_databasesTb4b4b4(Tb4b4b4) Tff7b72-Tff7b72> Tff7b72NoneTb4b4b4:
Te6edf3databases Tff7b72= Tb4b4b4{Ta5d6ff"Ta5d6fffirebaseTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffrestdbTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffrestdbTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6fffirebaseTa5d6ff"Tb4b4b4}
Te6edf3osTff7b72.Td2a8ffremoveTb4b4b4(
Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(
Te6edf3path_to_projectTb4b4b4, Ta5d6ff"Ta5d6ffModelTa5d6ff"Tb4b4b4, Ta5d6fffTa5d6ff"Ta5d6ffdatabase_Tffd700{Te6edf3databasesTb4b4b4[Te6edf3name_databaseTb4b4b4]Tffd700}Ta5d6ff.pyTa5d6ff"
Tb4b4b4)
Tb4b4b4)
Te6edf3osTff7b72.Td2a8ffrenameTb4b4b4(
Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Te6edf3path_to_projectTb4b4b4, Ta5d6ff"Ta5d6ffModelTa5d6ff"Tb4b4b4, Ta5d6fffTa5d6ff"Ta5d6ffdatabase_Tffd700{Te6edf3name_databaseTffd700}Ta5d6ff.pyTa5d6ff"Tb4b4b4)Tb4b4b4,
Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Te6edf3path_to_projectTb4b4b4, Ta5d6ff"Ta5d6ffModelTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffdatabase.pyTa5d6ff"Tb4b4b4)Tb4b4b4,
Tb4b4b4)
Tff7b72def Td2a8ffchek_camel_case_name_projectTb4b4b4(Te6edf3name_projectTb4b4b4) Tff7b72-Tff7b72> Te6edf3UnionTb4b4b4[Tffa657boolTb4b4b4, Tffa657listTb4b4b4]Tb4b4b4:
Te6edf3result Tff7b72= Te6edf3reTff7b72.Td2a8fffindallTb4b4b4(Ta5d6ff"Ta5d6ff[A-Z][a-z]*Ta5d6ff"Tb4b4b4, Te6edf3name_projectTb4b4b4)
Tff7b72if Tffa657lenTb4b4b4(Te6edf3resultTb4b4b4) Tff7b72== T79c0ff1Tb4b4b4:
Tff7b72return Tff7b72False
Tff7b72return Te6edf3result
Tff7b72def Td2a8ffcreate_argument_parserTb4b4b4(Tb4b4b4) Tff7b72-Tff7b72> Te6edf3ArgumentParserWithHelpTb4b4b4:
Te6edf3parser Tff7b72= Te6edf3ArgumentParserWithHelpTb4b4b4(
Te6edf3progTff7b72=Ta5d6ff"Ta5d6ffcreate_project.pyTa5d6ff"Tb4b4b4,
Te6edf3allow_abbrevTff7b72=Tff7b72FalseTb4b4b4,
Tb4b4b4)
Te6edf3parserTff7b72.Td2a8ffadd_argumentTb4b4b4(
Ta5d6ff"Ta5d6ffpatternTa5d6ff"Tb4b4b4,
Te6edf3helpTff7b72=Ta5d6ff"Ta5d6ffthe name of the pattern with which the project will be created.Ta5d6ff"Tb4b4b4,
Tb4b4b4)
Te6edf3parserTff7b72.Td2a8ffadd_argumentTb4b4b4(
Ta5d6ff"Ta5d6ffdirectoryTa5d6ff"Tb4b4b4,
Te6edf3helpTff7b72=Ta5d6ff"Ta5d6ffdirectory in which the project will be created.Ta5d6ff"Tb4b4b4,
Tb4b4b4)
Te6edf3parserTff7b72.Td2a8ffadd_argumentTb4b4b4(
Ta5d6ff"Ta5d6ffnameTa5d6ff"Tb4b4b4,
Te6edf3helpTff7b72=Ta5d6ff"Ta5d6ffproject name.Ta5d6ff"Tb4b4b4,
Tb4b4b4)
Te6edf3parserTff7b72.Td2a8ffadd_argumentTb4b4b4(
Ta5d6ff"Ta5d6ffpython_versionTa5d6ff"Tb4b4b4,
Te6edf3helpTff7b72=Ta5d6ff"Ta5d6ffthe version of Python (specify as `python3.9` or `python3.8`) Ta5d6ff"
Ta5d6ff"Ta5d6ffwith which the virtual environment will be created.Ta5d6ff"Tb4b4b4,
Tb4b4b4)
Te6edf3parserTff7b72.Td2a8ffadd_argumentTb4b4b4(
Ta5d6ff"Ta5d6ffkivy_versionTa5d6ff"Tb4b4b4,
Te6edf3helpTff7b72=Ta5d6ff"Ta5d6ffversion of Kivy (specify as `2.1.0` or `master`) that will be Ta5d6ff"
Ta5d6ff"Ta5d6ffused in the project.Ta5d6ff"Tb4b4b4,
Tb4b4b4)
Te6edf3parserTff7b72.Td2a8ffadd_argumentTb4b4b4(
Ta5d6ff"Ta5d6ff--name_screenTa5d6ff"Tb4b4b4,
Te6edf3nargsTff7b72=Ta5d6ff"Ta5d6ff*Ta5d6ff"Tb4b4b4,
Tffa657typeTff7b72=Tffa657strTb4b4b4,
Te6edf3defaultTff7b72=Tb4b4b4[Ta5d6ff"Ta5d6ffMainScreenTa5d6ff"Tb4b4b4]Tb4b4b4,
Te6edf3helpTff7b72=Ta5d6ff"Ta5d6ffthe name/names of the class which be used when creating the project pattern.Ta5d6ff"Tb4b4b4,
Tb4b4b4)
Te6edf3parserTff7b72.Td2a8ffadd_argumentTb4b4b4(
Ta5d6ff"Ta5d6ff--use_responsiveTa5d6ff"Tb4b4b4,
Te6edf3nargsTff7b72=Ta5d6ff"Ta5d6ff*Ta5d6ff"Tb4b4b4,
Tffa657typeTff7b72=Tffa657strTb4b4b4,
Te6edf3defaultTff7b72=Tb4b4b4[Tb4b4b4]Tb4b4b4,
Te6edf3helpTff7b72=Ta5d6ff"Ta5d6ffthe name/names of the views to be used by the responsive UI.Ta5d6ff"Tb4b4b4,
Tb4b4b4)
Te6edf3parserTff7b72.Td2a8ffadd_argumentTb4b4b4(
Ta5d6ff"Ta5d6ff--name_databaseTa5d6ff"Tb4b4b4,
Te6edf3defaultTff7b72=Ta5d6ff"Ta5d6ffnoTa5d6ff"Tb4b4b4,
Te6edf3helpTff7b72=Ta5d6ff"Ta5d6ffname of the database provider (Ta5d6ff'Ta5d6fffirebaseTa5d6ff'Ta5d6ff or Ta5d6ff'Ta5d6ffrestdbTa5d6ff'Ta5d6ff).Ta5d6ff"Tb4b4b4,
Tb4b4b4)
Te6edf3parserTff7b72.Td2a8ffadd_argumentTb4b4b4(
Ta5d6ff"Ta5d6ff--use_hotreloadTa5d6ff"Tb4b4b4,
Te6edf3defaultTff7b72=Ta5d6ff"Ta5d6ffnoTa5d6ff"Tb4b4b4,
Te6edf3helpTff7b72=Ta5d6ff"Ta5d6ffcreates a hot reload entry point to the application.Ta5d6ff"Tb4b4b4,
Tb4b4b4)
Te6edf3parserTff7b72.Td2a8ffadd_argumentTb4b4b4(
Ta5d6ff"Ta5d6ff--use_localizationTa5d6ff"Tb4b4b4,
Te6edf3defaultTff7b72=Ta5d6ff"Ta5d6ffnoTa5d6ff"Tb4b4b4,
Te6edf3helpTff7b72=Ta5d6ff"Ta5d6ffcreates application localization files.Ta5d6ff"Tb4b4b4,
Tb4b4b4)
Tff7b72return Te6edf3parser
Tff7b72if Tff7b72__name__ Tff7b72== Ta5d6ff"Ta5d6ff__main__Ta5d6ff"Tb4b4b4:
Te6edf3mainTb4b4b4(Tb4b4b4)
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────